#ifndef __Base_I2C_H
#define __Base_I2C_H

#ifdef __cplusplus
extern "C" {
#endif

#include "stm32f1xx_hal.h"
#include "i2c.h"


/**
 * @brief 通过 I2C 接口写入命令数据
 * @param hi2cX: 指向 I2C 句柄的指针，用于指定使用的 I2C 总线实例
 * @param addr: 目标设备的 I2C 地址(7bit)，标识要与之通信的从设备
 * @param txData: 指向待发送数据的指针，包含了要写入 I2C 设备的命令或数据内容
 * @param len: 要发送数据的长度，即 txData 中数据的字节数
 * @param timeout: 操作超时时间，若在该时间内操作未完成，则操作失败;单位ms
 * @retval HAL_StatusTypeDef: 操作状态，如 HAL_OK 表示成功，其他值表示失败
 */
HAL_StatusTypeDef Base_I2C_WriteCmd(uint8_t* hi2cX, uint16_t addr, uint8_t* txData, uint8_t len, uint16_t timeout = 100);

/**
 * @brief 通过 I2C 接口读取命令响应数据
 * @param hi2cX: 指向 I2C 句柄的指针，用于指定使用的 I2C 总线实例
 * @param addr: 目标设备的 I2C 地址(7bit)，标识要与之通信的从设备
 * @param rxData: 指向用于存储接收到数据的缓冲区的指针，读取到的数据会存于此
 * @param len: 要读取数据的长度，即期望从 I2C 设备读取的字节数
 * @param timeout: 操作超时时间，若在该时间内操作未完成，则操作失败;单位ms
 * @retval HAL_StatusTypeDef: 操作状态，如 HAL_OK 表示成功，其他值表示失败
 */
HAL_StatusTypeDef Base_I2C_ReadCmd(uint8_t* hi2cx, uint16_t addr, uint8_t* rxData, uint8_t len, uint16_t timeout = 100);

#ifdef __cplusplus
}
#endif

#endif /* __Base_I2C_H */
//author: 信息23 韩林杏